﻿using System;
using System.Collections.Generic;
using System.Web;

using System.Text;
using System.Xml.Serialization;
using System.Data.Odbc;
using System.Data;
using WLMCoreLibrary;
using MiWebSite_Core;


namespace MWS_Store
{
    public class StoreProducto : BaseClass
    {
        #region private fields
        private int _cantidad;
        private String _modelo;
        private int _idImagen;
        private DateTime _fechaDisponibilidad;
        private Decimal _peso;
        private Boolean _idstatus;
        private int _idFabricante;
        private int _cantidadOrdenados;
        private String _nombre;
        private String _descripcion;
        private String _descMini;
        private String _features;
        private String _features2;
        private int _visto;
        private int _idGaleria;
        private Decimal _precio1;
        private Decimal _precio2;
        private Decimal _precio3;
        private Decimal _precio4;
        private Decimal _precio5;
        private int _irArchivoAdicional;
        private String _productName;
        private Categoria _categoria;
        private Categoria _categoriaPadre;

        public Categoria categoriaPadre
        {
            get { return _categoriaPadre; }
            set { _categoriaPadre = value; }
        }

        public Categoria categoria
        {
            get { return _categoria; }
            set { _categoria = value; }
        }
        #endregion

        #region public properties
        public int cantidad { get { return _cantidad; } set { _cantidad = value; } }
        public String modelo { get { return _modelo; } set { _modelo = value; } }
        public int idImagen { get { return _idImagen; } set { _idImagen = value; } }
        public DateTime fechaDisponibilidad { get { return _fechaDisponibilidad; } set { _fechaDisponibilidad = value; } }
        public Decimal peso { get { return _peso; } set { _peso = value; } }
        public Boolean idstatus { get { return _idstatus; } set { _idstatus = value; } }
        public int idFabricante { get { return _idFabricante; } set { _idFabricante = value; } }
        public int cantidadOrdenados { get { return _cantidadOrdenados; } set { _cantidadOrdenados = value; } }
        public String nombre { get { return _nombre; } set { _nombre = value; } }
        public String descripcion { get { return _descripcion; } set { _descripcion = value; } }
        public String descMini { get { return _descMini; } set { _descMini = value; } }
        public String features { get { return _features; } set { _features = value; } }
        public String features2 { get { return _features2; } set { _features2 = value; } }
        public int visto { get { return _visto; } set { _visto = value; } }
        public int idGaleria { get { return _idGaleria; } set { _idGaleria = value; } }
        public Decimal precio1 { get { return _precio1; } set { _precio1 = value; } }
        public Decimal precio2 { get { return _precio2; } set { _precio2 = value; } }
        public Decimal precio3 { get { return _precio3; } set { _precio3 = value; } }
        public Decimal precio4 { get { return _precio4; } set { _precio4 = value; } }
        public Decimal precio5 { get { return _precio5; } set { _precio5 = value; } }
        public int irArchivoAdicional { get { return _irArchivoAdicional; } set { _irArchivoAdicional = value; } }
        public String productName { get { return _productName; } set { _productName = value; } }
        #endregion

        #region constructors
        public StoreProducto()
        {
        }

        public StoreProducto(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
           id = classBinder.NewRecord("STOREPRODUCTOS");
            string queryString = "";
            queryString = "SELECT * FROM STOREPRODUCTOS WHERE id='" + id + "'";
            GetRecord(queryString);
        }

        public StoreProducto(int registryId,ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM STOREPRODUCTOS WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
            categoria = new Categoria(new Storecat2product(this,ref ConexionDB).idCategoria,ref ConexionDB);
            categoriaPadre = new Categoria(categoria.idPadre,ref ConexionDB);
            if (categoriaPadre.idPadre == 0)
                categoriaPadre = null;
        }
        public StoreProducto(DataRow dataRow, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }

        public StoreProducto(string registryname, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM STOREPRODUCTOS WHERE productname='" + registryname + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM STOREPRODUCTOS WHERE id='" + id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                   id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                   idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                   fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                   fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("cantidad")))
                   cantidad = (System.Int32)reader["cantidad"];
                if (!reader.IsDBNull(reader.GetOrdinal("modelo")))
                   modelo = (System.String)reader["modelo"];
                if (!reader.IsDBNull(reader.GetOrdinal("idImagen")))
                   idImagen = (System.Int32)reader["idImagen"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaDisponibilidad")))
                   fechaDisponibilidad = Convert.ToDateTime(reader["fechaDisponibilidad"]);
                if (!reader.IsDBNull(reader.GetOrdinal("peso")))
                   peso = (System.Decimal)reader["peso"];
                if (!reader.IsDBNull(reader.GetOrdinal("idstatus")))
                   idstatus = Convert.ToBoolean(reader["idstatus"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idFabricante")))
                   idFabricante = (System.Int32)reader["idFabricante"];
                if (!reader.IsDBNull(reader.GetOrdinal("cantidadOrdenados")))
                   cantidadOrdenados = (System.Int32)reader["cantidadOrdenados"];
                if (!reader.IsDBNull(reader.GetOrdinal("nombre")))
                   nombre = (System.String)reader["nombre"];
                if (!reader.IsDBNull(reader.GetOrdinal("descripcion")))
                   descripcion = (System.String)reader["descripcion"];
                if (!reader.IsDBNull(reader.GetOrdinal("descMini")))
                   descMini = (System.String)reader["descMini"];
                if (!reader.IsDBNull(reader.GetOrdinal("features")))
                   features = (System.String)reader["features"];
                if (!reader.IsDBNull(reader.GetOrdinal("features2")))
                   features2 = (System.String)reader["features2"];
                if (!reader.IsDBNull(reader.GetOrdinal("visto")))
                   visto = (System.Int32)reader["visto"];
                if (!reader.IsDBNull(reader.GetOrdinal("idGaleria")))
                   idGaleria = (System.Int32)reader["idGaleria"];
                if (!reader.IsDBNull(reader.GetOrdinal("precio1")))
                   precio1 = (System.Decimal)reader["precio1"];
                if (!reader.IsDBNull(reader.GetOrdinal("precio2")))
                   precio2 = (System.Decimal)reader["precio2"];
                if (!reader.IsDBNull(reader.GetOrdinal("precio3")))
                   precio3 = (System.Decimal)reader["precio3"];
                if (!reader.IsDBNull(reader.GetOrdinal("precio4")))
                   precio4 = (System.Decimal)reader["precio4"];
                if (!reader.IsDBNull(reader.GetOrdinal("precio5")))
                   precio5 = (System.Decimal)reader["precio5"];
                if (!reader.IsDBNull(reader.GetOrdinal("irArchivoAdicional")))
                   irArchivoAdicional = (System.Int32)reader["irArchivoAdicional"];
                if (!reader.IsDBNull(reader.GetOrdinal("productName")))
                   productName = (System.String)reader["productName"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                   id = (System.Int32)dataRow["id"];
                if (dataRow["idUsuario"] != null)
                   idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["fechaCreacion"] != null)
                   fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                   fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["cantidad"] != null)
                   cantidad = (System.Int32)dataRow["cantidad"];
                if (dataRow["modelo"] != null)
                   modelo = (System.String)dataRow["modelo"];
                if (dataRow["idImagen"] != null)
                   idImagen = (System.Int32)dataRow["idImagen"];
                if (dataRow["fechaDisponibilidad"] != null)
                   fechaDisponibilidad = (System.DateTime)dataRow["fechaDisponibilidad"];
                if (dataRow["peso"] != null)
                   peso = (System.Decimal)dataRow["peso"];
                if (dataRow["idstatus"] != null)
                   idstatus = (bool)dataRow["idstatus"];
                if (dataRow["idFabricante"] != null)
                   idFabricante = (System.Int32)dataRow["idFabricante"];
                if (dataRow["cantidadOrdenados"] != null)
                   cantidadOrdenados = (System.Int32)dataRow["cantidadOrdenados"];
                if (dataRow["nombre"] != null)
                   nombre = (System.String)dataRow["nombre"];
                if (dataRow["descripcion"] != null)
                   descripcion = (System.String)dataRow["descripcion"];
                if (dataRow["descMini"] != null)
                   descMini = (System.String)dataRow["descMini"];
                if (dataRow["features"] != null)
                   features = (System.String)dataRow["features"];
                if (dataRow["features2"] != null)
                   features2 = (System.String)dataRow["features2"];
                if (dataRow["visto"] != null)
                   visto = (System.Int32)dataRow["visto"];
                if (dataRow["idGaleria"] != null)
                   idGaleria = (System.Int32)dataRow["idGaleria"];
                if (dataRow["precio1"] != null)
                   precio1 = (System.Decimal)dataRow["precio1"];
                if (dataRow["precio2"] != null)
                   precio2 = (System.Decimal)dataRow["precio2"];
                if (dataRow["precio3"] != null)
                   precio3 = (System.Decimal)dataRow["precio3"];
                if (dataRow["precio4"] != null)
                   precio4 = (System.Decimal)dataRow["precio4"];
                if (dataRow["precio5"] != null)
                   precio5 = (System.Decimal)dataRow["precio5"];
                if (dataRow["irArchivoAdicional"] != null)
                   irArchivoAdicional = (System.Int32)dataRow["irArchivoAdicional"];
                if (dataRow["productName"] != null)
                   productName = (System.String)dataRow["productName"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE STOREPRODUCTOS set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",cantidad='" + cantidad.ToString() + "'");
            strCommand.Append(",modelo=\"" + WLMFunctions.comillas(this._modelo) + "\"");
            strCommand.Append(",idImagen='" + idImagen.ToString() + "'");
            strCommand.Append(",fechaDisponibilidad='" + fechaDisponibilidad.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",peso=\"" + WLMFunctions.comillas(this._peso) + "\"");
            strCommand.Append(",idstatus='" + Convert.ToInt16(this._idstatus) + "'");
            strCommand.Append(",idFabricante='" + idFabricante.ToString() + "'");
            strCommand.Append(",cantidadOrdenados='" + cantidadOrdenados.ToString() + "'");
            strCommand.Append(",nombre=\"" + WLMFunctions.comillas(this._nombre) + "\"");
            strCommand.Append(",descripcion=\"" + WLMFunctions.comillas(this._descripcion) + "\"");
            strCommand.Append(",descMini=\"" + WLMFunctions.comillas(this._descMini) + "\"");
            strCommand.Append(",features=\"" + WLMFunctions.comillas(this._features) + "\"");
            strCommand.Append(",features2=\"" + WLMFunctions.comillas(this._features2) + "\"");
            strCommand.Append(",visto='" + visto.ToString() + "'");
            strCommand.Append(",idGaleria='" + idGaleria.ToString() + "'");
            strCommand.Append(",precio1=\"" + WLMFunctions.comillas(this._precio1) + "\"");
            strCommand.Append(",precio2=\"" + WLMFunctions.comillas(this._precio2) + "\"");
            strCommand.Append(",precio3=\"" + WLMFunctions.comillas(this._precio3) + "\"");
            strCommand.Append(",precio4=\"" + WLMFunctions.comillas(this._precio4) + "\"");
            strCommand.Append(",precio5=\"" + WLMFunctions.comillas(this._precio5) + "\"");
            strCommand.Append(",irArchivoAdicional='" + irArchivoAdicional.ToString() + "'");
            strCommand.Append(",productName=\"" + WLMFunctions.comillas(this._productName) + "\"");
            strCommand.Append(" WHERE id='" + id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    [Serializable]
    [XmlType("StoreListaProductos")]
    public class StoreProductoCollection
    {
        [XmlIgnore]
        public List<StoreProducto> Elementos { get; set; }

        [XmlElement( "StoreProducto" )]
        public List<StoreProducto> Productos
        {
            get;
            set;
        }

        public Categoria Categoria
        {
            get;
            set;
        }


        public Categoria CategoriaPadre
        {
            get;
            set;
        }



        public Categoria CategoriaAbuelo
        {
            get;
            set;
        }

        public StoreProductoCollection()
        {
        }
        public StoreProductoCollection(ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT id FROM STOREPRODUCTOS ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<StoreProducto>();
           Productos = new List<StoreProducto>();
            while (dataReader.Read())
            {
                StoreProducto newItem = new StoreProducto(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
                Elementos.Add( newItem );
               Productos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public StoreProductoCollection(Random random, ref dbConnector ConexionDB)
        {
 
            string strCommand = "SELECT id FROM STOREPRODUCTOS ORDER BY RAND()";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<StoreProducto>();
           Productos = new List<StoreProducto>();
            while (dataReader.Read())
            {
                StoreProducto newItem = new StoreProducto(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
                Elementos.Add( newItem );
               Productos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public StoreProductoCollection(Random random,int limite, ref dbConnector ConexionDB)
        {
      
            string strCommand = "SELECT id FROM STOREPRODUCTOS ORDER BY RAND() LIMIT "+limite;
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<StoreProducto>();
           Productos = new List<StoreProducto>();
            while (dataReader.Read())
            {
                StoreProducto newItem = new StoreProducto(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
                Elementos.Add( newItem );
               Productos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public StoreProductoCollection(Categoria categoria, ref dbConnector ConexionDB)
        {
      
            string strCommand = "SELECT P.id FROM STOREPRODUCTOS P LEFT JOIN STORECAT2PRODUCT C2P ON C2P.idProducto=P.id WHERE C2P.idCategoria=" + categoria.id;
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<StoreProducto>();
           Productos = new List<StoreProducto>();
            while (dataReader.Read())
            {
                StoreProducto newItem = new StoreProducto(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
                Elementos.Add( newItem );
               Productos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
            Categoria = categoria;
            Categoria padre = new Categoria(categoria.idPadre,ref ConexionDB);
            if (padre.idPadre != 0)
                CategoriaPadre = padre;
            Categoria abuelo = new Categoria(padre.idPadre,ref ConexionDB);
            if (abuelo.idPadre != 0)
                CategoriaAbuelo = abuelo;
        }
    }

    public class Storecat2product : BaseClass
    {
        #region private fields
        private int _idCategoria;
        private int _idProducto;
        #endregion

        #region public properties
        public int idCategoria { get { return _idCategoria; } set { _idCategoria = value; } }
        public int idProducto { get { return _idProducto; } set { _idProducto = value; } }
        #endregion

        #region constructors
        public Storecat2product(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("STORECAT2PRODUCT");
            string queryString = "";
            queryString = "SELECT * FROM STORECAT2PRODUCT WHERE id='" + id + "'";
            GetRecord(queryString);
        }

        public Storecat2product(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM STORECAT2PRODUCT WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }

        public Storecat2product(StoreProducto producto, ref dbConnector ConexionDB)
        {

            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM STORECAT2PRODUCT WHERE idProducto='" + producto.id + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            this.GetRecord(queryString);
        }

        public Storecat2product(DataRow dataRow, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM STORECAT2PRODUCT WHERE id='" + id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                   id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                   fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                   fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                   idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
                   idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCategoria")))
                   idCategoria = (System.Int32)reader["idCategoria"];
                if (!reader.IsDBNull(reader.GetOrdinal("idProducto")))
                   idProducto = (System.Int32)reader["idProducto"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                   id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                   fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                   fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                   idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                   idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["idCategoria"] != null)
                   idCategoria = (System.Int32)dataRow["idCategoria"];
                if (dataRow["idProducto"] != null)
                   idProducto = (System.Int32)dataRow["idProducto"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE STORECAT2PRODUCT set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",idCategoria='" + idCategoria.ToString() + "'");
            strCommand.Append(",idProducto='" + idProducto.ToString() + "'");
            strCommand.Append(" WHERE id='" + id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class Storecat2productCollection
    {


        public List<Storecat2product> Elementos { get; set; }
        public Storecat2productCollection()
        {
        }
        public Storecat2productCollection(ref dbConnector ConexionDB)
        {
      
            string strCommand = "SELECT id FROM STORECAT2PRODUCT ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<Storecat2product>();
            while (dataReader.Read())
            {
                Storecat2product newItem = new Storecat2product(Convert.ToInt32(dataReader["id"]),ref ConexionDB);
                Elementos.Add( newItem );
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }

   
}